(1) 引用类型
在 ECMAScript 中,引用类型是一种数据结构。
用于将数据和功能组织在一起。它也常被称为类,但这种称呼并不妥当。尽管 ECMAScript
从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基
本结构。引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。
(2) object定义
推荐定义object用字面量定义
var person = {
name : "Nicholas",
age : 29
};
var person = {}; //与 new Object()相同
person.name = "Nicholas";
person.age = 29;
(3)array定义推荐
var colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组
var names = []; // 创建一个空数组 ,用它即可。
var values = [1,2,]; // 不要这样!这样会创建一个包含 2 或 3 项的数组
var options = [,,,,,]; // 不要这样!这样会创建一个包含 5 或 6 项的数组
一些知识点
/*1 动态给数组加数据,类似于线性表了。*/
var colors = ["red", "blue", "green"]; // 创建一个包含 3 个字符串的数组
colors[colors.length] = "black"; //(在位置 3)添加一种颜色
colors[colors.length] = "brown"; //(在位置 4)再添加一种颜色
/*2 数组的toLocaleString()方法,其实是调用每一项的toString方法,输出。*/
/*数组的栈以及队列方法
push,pop,shift
其中push和shift结合可以实现队列方法。*/
var colors=new Array();
var count=colors.push("red","green"); //这个函数调用会返回2,有意思
alert(count);
count=colors.push("black");
alert(count);
var item=colors.shift(); //取得第一项,厉害了
alert(item);
(4) 数组的迭代方法
- every():对数组中的每一项运行给定函数,如果该函数对每一项都返回 true,则返回 true。
- filter():对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组。
- forEach():对数组中的每一项运行给定函数。这个方法没有返回值。
- map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
- some():对数组中的每一项运行给定函数,如果该函数对任一项返回 true,则返回 true。
以上方法都不会修改数组中的包含的值。
在这些方法中,最相似的是 every()和 some(),它们都用于查询数组中的项是否满足某个条件。
对 every()来说,传入的函数必须对每一项都返回 true,这个方法才返回 true;否则,它就返回
false。而 some()方法则是只要传入的函数对数组中的某一项返回 true,就会返回 true。请看以下
例子。
var numbers = [1, 2, 4, 343, 43, 423, 4];
var everyResult = numbers.every(function (item, index, array) {
return (item>2)
})
alert(everyResult); //false,他要求所有item都>2才可以。
var evetyResultq=numbers.some(function(item,index,array){
return (item>2)
})
alert(everyResult);//ture,他只要求其中有一个到几个>2即可。
var filteResult=numbers.filter(function(item,index,array){
return (item>2);
})
alert(filteResult) //返回这个数组所有大于2的数,并组成一个数组,这个牛逼了
(5) 作为值的函数
/*因为 ECMAScript 中的函数名本身就是变量,所以函数也可以作为值来使用。也就是说,不仅可以
像传递参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另一个函数的结果返回。来看
一看下面的函数。*/
function callSomeFunction(someFunction, someArgument) {
return someFunction(someArgument); //函数返回一个值,这个值就是一个函数
}
function add10num(num) {
return num + 10;
}
var result = callSomeFunction(add10num, 10);
alert(result);//20
(6) 作为值的函数以及call
function callSomeFunction(someFunction, someArgument) {
return someFunction(someArgument); //函数返回一个值,这个值就是一个函数
}
function add10num(num) {
return num + 10;
}
var result = callSomeFunction(add10num, 10);
alert(result);//20
window.color = "red";
var o = { color: "blue" };
function sayColor() {
alert(this.color);
}
sayColor();
sayColor.call(this);//red,这是全局变量使用
sayColor.call(o);//blue,call可以帮我们指定this对象所指向的位置。完美
(7)基本包装类型的生存期以及后台解析成对象
var s1="some text";
var s2=s1.substring(2);
/*后台其实是执行了这样的一个过程
(1) 创建 String 类型的一个实例;
(2) 在实例上调用指定的方法;
(3) 销毁这个实例。
可以将以上三个步骤想象成是执行了下列 ECMAScript 代码。
var s1 = new String("some text");
var s2 = s1.substring(2);
s1 = null;
经过此番处理,基本的字符串值就变得跟对象一样了。而且,上面这三个步骤也分别适用于 Boolean
和 Number 类型对应的布尔值和数字值。
引用类型与基本包装类型的主要区别就是对象的生存期。使用 new 操作符创建的引用类型的实例,
在执行流离开当前作用域之前都一直保存在内存中。而自动创建的基本包装类型的对象,则只存在于一
行代码的执行瞬间,然后立即被销毁。这意味着我们不能在运行时为基本类型值添加属性和方法。如下代码所示
*/
var s1 = "some text";
s1.color = "red";
alert(s1.color); //undefined
(8)单体内置对象Global对象
不属于任何其他对象的属性和方法,最终都是Global对象中的属性和方法。
winow对象,
ECMAScript 虽然没有指出如何直接访问 Global 对象,但 Web 浏览器都是将这个全局对象作为
window 对象的一部分加以实现的。因此,在全局作用域中声明的所有变量和函数,就都成为了 window
对象的属性。来看下面的例子。
var color = "red";
function sayColor(){
alert(window.color);
}
window.sayColor(); //"red"
(9)小结
对象在 JavaScript 中被称为引用类型的值,而且有一些内置的引用类型可以用来创建特定的对象,
现简要总结如下:
1 引用类型与传统面向对象程序设计中的类相似,但实现不同;
2 Object 是一个基础类型,其他所有类型都从 Object 继承了基本的行为;
3 Array 类型是一组值的有序列表,同时还提供了操作和转换这些值的功能;
4 Date 类型提供了有关日期和时间的信息,包括当前日期和时间以及相关的计算功能;
5 RegExp 类型是 ECMAScript 支持正则表达式的一个接口,提供了最基本的和一些高级的正则表
达式功能。
函数实际上是 Function 类型的实例,因此函数也是对象;而这一点正是 JavaScript 最有特色的地
方。由于函数是对象,所以函数也拥有方法,可以用来增强其行为。
因为有了基本包装类型,所以 JavaScript 中的基本类型值可以被当作对象来访问。三种基本包装类
型分别是:Boolean、Number 和 String。以下是它们共同的特征:
6 每个包装类型都映射到同名的基本类型;
7 在读取模式下访问基本类型值时,就会创建对应的基本包装类型的一个对象,从而方便了数据
操作;
8 操作基本类型值的语句一经执行完毕,就会立即销毁新创建的包装对象。
在所有代码执行之前,作用域中就已经存在两个内置对象:Global 和 Math。在大多数 ECMAScript
实现中都不能直接访问 Global 对象;不过,Web 浏览器实现了承担该角色的 window 对象。全局变
量和函数都是 Global 对象的属性。Math 对象提供了很多属性和方法,用于辅助完成复杂的数学计算
任务。